package top.lixunda.ecommerce.server.user.api.feign;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.config.FeignConfig;
import top.lixunda.commerce.common.core.constants.ServiceIds;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.user.api.entity.db.BusinessTaskDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskCloseDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskCommitDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskQueryDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskStartDTO;
import top.lixunda.ecommerce.server.user.api.entity.vo.BusinessTaskVO;

import java.util.List;

/**
 * 业务代办任务管理接口
 *
 * @author lixunda
 * @version time:2020/4/13 13:54
 */
@Api("业务代办任务管理接口，接口调用")
@FeignClient(value = ServiceIds.MIDDLE_USER, configuration = FeignConfig.class)
@RequestMapping("/feign/business_task")
public interface IFeignBusinessTaskController {

    /**
     * 通过taskId查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param taskId 任务编号
     * @return 代办任务信息，只包括当前登陆人员的任务分配数据
     */
    @ApiOperation(value = "通过taskId查询当前登陆人员的代办任务信息", notes = "登陆权限")
    @GetMapping("queryCurrentUserTaskByTaskId")
    MessageObject<BusinessTaskVO> queryCurrentUserTaskByTaskId(@RequestParam("taskId") Integer taskId);

    /**
     * 通过taskId查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param taskName 任务名称
     * @return 代办任务信息，只包括当前登陆人员的任务分配数据
     */
    @ApiOperation(value = "通过taskId查询当前登陆人员的代办任务信息", notes = "登陆权限")
    @GetMapping("queryCurrentUserByTaskName")
    MessageObject<List<BusinessTaskVO>> queryCurrentUserByTaskName(@RequestParam("taskName") String taskName);

    /**
     * 通过条件分页查询查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param pageDTO 条件分页数据
     * @return 分页的代办任务信息
     */
    @ApiOperation(value = "通过条件分页查询查询当前登陆人员的代办任务信息", notes = "登陆权限")
    @PostMapping("queryCurrentUserTaskByPageWrapper")
    MessageObject<Page<BusinessTaskVO>> queryCurrentUserTaskByPageWrapper(
            @RequestBody @XumValid PageDTO<BusinessTaskDO, BusinessTaskQueryDTO> pageDTO);

    /**
     * 开启任务
     *
     * @param list 开启任务参数
     * @return 开启的流程
     */
    @ApiOperation("开启任务")
    @PostMapping("startTask")
    MessageObject<List<BusinessTaskVO>> startTask(@RequestBody List<BusinessTaskStartDTO> list);

    /**
     * 提交任务
     *
     * @param list 提交任务参数
     * @return 开启的流程
     */
    @ApiOperation("提交任务")
    @PostMapping("commitTask")
    MessageObject<List<BusinessTaskVO>> commitTask(@RequestBody List<BusinessTaskCommitDTO> list);

    /**
     * 关闭任务
     *
     * @param list 关闭流程参数
     * @return 是否关闭成功
     */
    @ApiOperation("关闭任务")
    @PostMapping("closeTask")
    MessageObject<Boolean> closeTask(@RequestBody List<BusinessTaskCloseDTO> list);

    /**
     * 根据taskId删除任务，内部调用，登陆权限
     *
     * @param taskIds 任务编号列表
     * @return 关闭的任务数据
     */
    @ApiOperation(value = "根据taskId删除任务", notes = "内部调用，登陆权限")
    @PostMapping("removeTaskByTaskIds")
    MessageObject<List<BusinessTaskVO>> removeTaskByTaskIds(
            @RequestBody List<Integer> taskIds);
}
